package cn.s1995.sloth.bizs.service.common;


import cn.s1995.sloth.admin.api.dto.FileUploadConfigDTO;
import cn.s1995.sloth.admin.api.entity.SysPublicParam;

import java.util.Map;

/**
 * CacheService
 *
 * @Author penf
 * @Description 缓存接口
 * @Date 2022/10/26 23:15
 */
public interface CacheService {

    /**
     * 获取系统参数
     * @param keys
     * @return
     */
    Map<String, SysPublicParam> getSysParams(String ...keys);

    /**
     * 删除用户信息
     * @param token
     * @return
     */
    void removeUserInfo(String token);

    /**
     * 是否启用短信
     * @return
     */
    boolean isEnableSMS();


    /**
     * 设置验证码
     *
     * @param scene             场景
     * @param val               值
     * @param verificationCode  验证码
     */
    boolean setVerifyCode(Integer scene, String val, String verificationCode);

    /**
     * 获取验证码
     *
     * @param scene    场景
     * @param val      值
     */
    String getVerifyCode(Integer scene, String val);

    /**
     * 删除验证码
     *
     * @param scene
     * @param mobile
     */
    void removeVerifyCode(Integer scene, String mobile);

    /**
     * 获取短信过期时间
     * @param scene
     * @param mobile
     * @return
     */
    Long getSmsExpire(Integer scene, String mobile);

    /**
     * 设置短信发送次数
     * @param scene
     * @param mobile
     * @description 30分钟内发送次数
     * @return
     */
    Long setSmsSendNum(Integer scene, String mobile);

    /**
     * 删除短信发送次数
     * @param scene
     * @param mobile
     */
    void removeSmsSendNum(Integer scene, String mobile);

    /**
     * 获取短信发送次数
     * @param scene
     * @param mobile
     * @return
     */
    Long getSmsSendNum(Integer scene, String mobile);

    /**
     * 设置禁用短信
     * @param scene
     * @param mobile
     */
    void setDisabledSms(int scene, String mobile);

    /**
     * 获取禁用短信
     * @param scene
     * @param mobile
     */
    String getDisabledSms(int scene, String mobile);

    /**
     * 获取短信发送次数限制
     * @return
     */
    long getSmsSendNumLimit();


    /**
     * 获取订单自动取消时间(单位：分钟)
     * @return
     */
    long getOrderAutoCancelTime();

    /**
     * 获取订单自动收货时间(单位：天)
     * @return
     */
    long getOrderAutoConfirmTime();

    /**
     * 获取用户地址最大限制
     * @return
     */
    long getShoppingAddressMaxLimit();

    /**
     * 获取文件上传配置
     * @return
     */
    FileUploadConfigDTO getFileUploadConfig();

    /**
     * @Inner修饰方法获取用户id
     * @param token
     * @return
     */
    Long getUidByToken(String token);

}
